home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / Cinematografo (IT).ifs < prev    next >
Encoding:
Text File  |  2005-01-30  |  11.4 KB  |  392 lines

  1. // GETINFO SCRIPTING
  2. // Cinematografo.it - by SM
  3.  
  4. (***************************************************
  5.  *  Movie importation script for:                  *
  6.  *  Cinematografo.it, http://www.cinematografo.it  *
  7.  *  vers. 1.01                                     *
  8.  * (c) 2003 Andrea Cristaudo achris@tiscalinet.it  *
  9.  *  2004 Stefano Mora stefano.mora@libero.it       *
  10.  *                                                 *
  11.  *  For use with Ant Movie Catalog 3.4.1           *
  12.  *  www.antp.be/software/moviecatalog              *
  13.  *                                                 *
  14.  *  This program is free software; you can         *
  15.  *  redistribute it and/or modify it under the     *
  16.  *  terms of the GNU General Public License as     *
  17.  *  published by the Free Software Foundation;     *
  18.  *  either version 2 of the License, or (at your   *
  19.  *  option) any later version.                     *
  20.  *                                                 *
  21.  ***************************************************)
  22.  
  23. program Cinematografo;
  24. var
  25.   MovieName: string;
  26.   TheMovieAddress: string;
  27.   idx : integer;
  28.  
  29. const
  30.   PATHLOG = 'c:\Programmi\Ant Movie Catalog\Log\LogsCinematogr\';
  31.   MOVIE = 'leon';
  32.   SITE = 'http://www.cinematografo.it';
  33.   
  34. // -- Formatta la stringa rendendola tutto minuscolo a parte la prima lettera
  35. function PrimaMaiu(str: string): string;
  36. begin
  37.   str := AnsiLowerCase(str);
  38.   Result := AnsiUpFirstLetter(str);
  39. end;
  40.  
  41. // -- Formatta la stringa cercando le prime lettere rendendole maiuscole
  42. function PrimeMaiu(str: string): string;
  43. begin
  44.   str := AnsiLowerCase(str);
  45.   str := AnsiMixedCase(str, ' -/');
  46.   Result := str;
  47. end;
  48.  
  49. // ---
  50.  
  51. function RemoveTabs(Pattern: string): string;
  52. begin
  53.   repeat
  54.     Delete(Pattern, 1, 1);
  55.   until Pos(#9, Pattern) <> 1;
  56.  
  57.   result := Pattern;
  58. end;
  59.  
  60. function Space2html(Url: string): string;
  61. var
  62.   Temp : string;
  63.   SpacePos : Integer;
  64. begin
  65.   repeat
  66.     SpacePos := pos(' ', Url);
  67.     if SpacePos <> 0 then
  68.       begin
  69.         Temp := copy(Url, 1, SpacePos -1);
  70.         Delete(Url, 1, SpacePos);
  71.         Temp := Temp + '%20' + Url;
  72.         Url := Temp;
  73.       end;
  74.   until pos(' ', Url) = 0;
  75.  
  76.   result := Url;
  77. end;
  78.  
  79. // ---
  80.  
  81. function FillInput(Page: TStringList; LineNr: Integer; Salto: Integer; Field: Integer): Integer;
  82. var
  83.   Line: string;
  84. begin
  85.   LineNr := LineNr + Salto;
  86.  
  87.   // Sostituzione <BR>
  88.   if (Field = fieldActors) or (Field=fieldDirector) then
  89.   begin
  90.     Line := StringReplace(Page.GetString(LineNr), '<BR>', ', ');
  91.   end
  92.   else
  93.   begin
  94.     if (Field = fieldCategory) or (Field = fieldCountry) then
  95.     begin
  96.       Line := StringReplace(Page.GetString(LineNr), '<BR>', '/');
  97.     end
  98.     else
  99.     begin
  100.       Line := StringReplace(Page.GetString(LineNr), '<BR>', #13#10);
  101.     end;
  102.   end;
  103.  
  104.   HTMLRemoveTags(Line);
  105.   HTMLDecode(Line);
  106.   Line := Trim(RemoveTabs(Line));
  107.   
  108.   // Correzione maiuscole/minuscole
  109.   if Field = fieldActors then
  110.     begin
  111.     Line := StringReplace(Line, '      ', ' : ');
  112.     Line := PrimeMaiu(Line);
  113.     end
  114.   else if (Field = fieldOriginalTitle) then
  115.     begin
  116.     Line := PrimaMaiu(Line);
  117.     end
  118.   else if (Field = fieldDirector) or (Field = fieldProducer) or (Field = fieldCountry) or (Field = fieldCategory) then Line := PrimeMaiu(Line);
  119.  
  120.   Line := StringReplace(Line, '  ', ' ');
  121.   Line := StringReplace(Line, '  ', ' ');
  122.   SetField(Field, Line);
  123.   Result := LineNr;
  124. end;
  125.  
  126. // ---
  127.  
  128. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  129. var
  130.   i: Integer;
  131. begin
  132.   result := -1;
  133.   if StartAt < 0 then
  134.     StartAt := 0;
  135.   for i := StartAt to List.Count-1 do
  136.     if Pos(Pattern, List.GetString(i)) <> 0 then
  137.     begin
  138.       result := i;
  139.       Break;
  140.     end;
  141. end;
  142.  
  143. // ----
  144.  
  145. procedure AnalyzePage(Address: string);
  146. var
  147.   Page: TStringList;
  148.   LineNr: integer;
  149.   BeginPos: integer;
  150. begin
  151.   Page := TStringList.Create;
  152.   Page.Text := GetPage(Address);
  153.   idx := 0;
  154.  
  155.   // Debug
  156.   //Page.SaveToFile(PATHLOG+MovieName+'.res0');
  157.   //Page.LoadFromFile(PATHLOG+MOVIE+'.res0');
  158.  
  159.   LineNr := FindLine('DELLA RICERCA', Page, 0);
  160.   if LineNr = -1 then
  161.   begin
  162.     LineNr := FindLine('Affina la tua ricerca', Page, 0);
  163.     if LineNr = -1 then
  164.     begin
  165.       SetField(fieldURL, Address);
  166.       AnalyzeMoviePage(Page);
  167.     end
  168.     else
  169.       ShowMessage('Nessun film trovato');
  170.   end
  171.   else  // Trovati film !   Nota: possono esserci + pagine -> non gestito !
  172.   begin
  173.     // Crea la lista di film
  174.     PickTreeClear;
  175.     PickTreeAdd('Risultati ricerca per "' + MovieName + '":', '');
  176.     AddMoviesTitles(Page);
  177.     if PickTreeExec(Address) then
  178.       begin
  179.         SetField(fieldURL, Address);    // Memorizza il campo URL
  180.         Page.Text := GetPage(Address);  // Richiede la pagina del film
  181.         AnalyzeMoviePage(Page);         // Analizza la pagina del film
  182.       end;
  183.   end;
  184.   Page.Free;
  185. end;
  186.  
  187. // ---
  188.  
  189. procedure AnalyzeMoviePage(Page: TStringList);
  190. var
  191.   Fine: Integer;
  192.   Line: string;
  193.   Line2: string;
  194.   LineNr: Integer;
  195.   BeginPos, EndPos: Integer;
  196.   Field: integer;
  197. begin
  198.  
  199.   //Debug
  200.   //Page.SaveToFile(PATHLOG+MovieName+'.film');
  201.   //Page.LoadFromFile(PATHLOG+MOVIE+'.film');
  202.  
  203.   Fine := 0;
  204.   LineNr := FindLine('<font color="#ffffff">Titolo Film</font>', Page, 0);
  205.  
  206.   if LineNr > -1 then
  207.   begin
  208.     //Translated Title
  209.     LineNr := LineNr + 5;
  210.     Line := Page.GetString(LineNr);
  211.     HTMLRemoveTags(Line);
  212.     Line := RemoveTabs(Line);
  213.     SetField(fieldTranslatedTitle, PrimaMaiu(Line) );
  214.     SetField(fieldOriginalTitle, PrimaMaiu(Line) );
  215.  
  216.     // Immagine
  217.     LineNr := LineNr + 3;
  218.     Line := Page.GetString(LineNr);
  219.     if pos('<img border="0" src="', Line) <> 0 then
  220.     begin
  221.       BeginPos := pos('<img border="0" src="', Line);
  222.       Delete(Line, 1, BeginPos + 20);
  223.       EndPos := pos('" ', Line);
  224.       Line := copy(Line, 1, EndPos - 1);
  225.       Line := StringReplace(Line, ' ', '');
  226.  
  227.       Line := 'http://www.cinematografo.it/bdcm/' + Line;
  228.       Line := Space2html(Line);
  229.       GetPicture(Line, False);
  230.     end
  231.     repeat
  232.       LineNr := LineNr + 1;
  233.       Line := Page.GetString(LineNr);
  234.  
  235.       if pos('<font color="#ffffff">Anno</font>', Line) <> 0 then
  236.         LineNr := FillInput(Page, LineNr, 3, fieldYear)
  237.       else if pos('<font color="#ffffff">Titolo originale</font>', Line) <> 0 then
  238.         LineNr := FillInput(Page, LineNr, 3, fieldOriginalTitle)
  239.       else if pos('<font color="#ffffff">Durata</font>', Line) <> 0 then
  240.         LineNr := FillInput(Page, LineNr, 3, fieldLength)
  241.       else if pos('<font color="#ffffff">Origine</font>', Line) <> 0 then
  242.         LineNr := FillInput(Page, LineNr, 3, fieldCountry)
  243.       else if pos('<font color="#ffffff">Genere</font>', Line) <> 0 then
  244.         LineNr := FillInput(Page, LineNr, 3, fieldCategory)
  245.       else if pos('<font color="#ffffff">Produzione</font>', Line) <> 0 then
  246.         LineNr := FillInput(Page, LineNr, 3, fieldProducer)
  247.       else if pos('<font color="#ffffff">Regia</font>', Line) <> 0 then
  248.         LineNr := FillInput(Page, LineNr, 3, fieldDirector)
  249.       else if pos('<font color="#ffffff">Trama</font>', Line) <> 0 then
  250.         begin
  251.         LineNr := LineNr+3;
  252.         Line := Page.GetString(LineNr);
  253.         HTMLRemoveTags(Line);
  254.         Line := Trim(RemoveTabs(Line));
  255.         LineNr := LineNr+1;
  256.         if Left(Line, 6)='TRAMA ' then  // Trama breve e lunga su + righe
  257.           begin
  258.           Line := Page.GetString(LineNr); // Tengo la trama breve
  259.           LineNr := LineNr+1;
  260.           end
  261.  
  262.         Line2 := Page.GetString(LineNr);  // Event. seconda riga
  263.         HTMLRemoveTags(Line2);
  264.         if trim(Line2)<> '' then Line := Line + Line2;
  265.  
  266.         SetField(fieldDescription, Line);
  267.         end
  268.       else if pos('<font color="#ffffff">Critica</font>', Line) <> 0 then
  269.         LineNr := FillInput(Page, LineNr, 3, fieldComments)
  270.       else if pos('<font color="#ffffff">Attori</font>', Line) <> 0 then
  271.         LineNr := FillInput(Page, LineNr, 3, fieldActors)
  272.       else if pos('<img align="right" border="0"', Line) <> 0 then
  273.         begin
  274.           BeginPos := pos('<img align="right" border="0" src="', Line);
  275.           Delete(Line, 1, BeginPos + 35);
  276.           EndPos := pos('">', Line);
  277.           Line := copy(Line, 1, EndPos - 1);
  278.           Line := 'http://www.cinematografo.it/' + Line;
  279.           Line := Space2html(Line);
  280.           GetPicture(Line, False);
  281.         end
  282.       else if pos('</table>', Line) <> 0 then
  283.         Fine := 1;
  284.  
  285.     until Fine = 1;
  286.   end;
  287.   
  288.   DisplayResults;
  289. end;
  290.  
  291. // ---
  292. // Riempie la lista con i film trovati
  293.  
  294. procedure AddMoviesTitles(Page: TStringList);
  295.  
  296. var
  297.   LineNr: Integer;
  298.   Line: string;
  299.   MovieTitle, MovieAddress: string;
  300.   BeginPos, EndPos: Integer;
  301.   Pagina: TStringList;
  302.  
  303. begin
  304.   TheMovieAddress := '*';
  305.   LineNr := 0;
  306.  
  307.   LineNr := FindLine('<a href="bancadati_scheda.asp?sch=',Page,LineNr);
  308.   while LineNr > -1 do
  309.   begin
  310.     Line := Page.GetString(LineNr);
  311.  
  312.     BeginPos := pos('<a href="',Line)+9;  // Punta all'inizio url
  313.     Delete(Line, 1, BeginPos-1);          // Cancella tutti i char precedenti
  314.     
  315.     BeginPos := 1;            // Nuovo inizio
  316.     EndPos := pos('">',Line); // Fine url
  317.  
  318.     // Crea l'url per il film
  319.     MovieAddress := SITE + '/bdcm/' + copy(Line,BeginPos,EndPos-BeginPos);
  320.     
  321.     // Riga successiva = titolo trovato
  322.     LineNr := LineNr + 1;
  323.     Line := Page.GetString(LineNr);
  324.     MovieTitle := AnsiUpFirstLetter(Line);
  325.     // Ripulisce il titolo
  326.     HTMLRemoveTags(MovieTitle);
  327.     HTMLDecode(MovieTitle);
  328.     MovieTitle := RemoveTabs(MovieTitle);
  329.  
  330.     // Cerca l'anno del film
  331.     LineNr := LineNr + 3;
  332.     Line := Page.GetString(LineNr);
  333.     HTMLRemoveTags(Line);
  334.     Line := RemoveTabs(Line);
  335.     Line := StringReplace( Line, ' ', '');
  336.     Line := StringReplace( Line, '-', '');
  337.  
  338.     // Costruisce la riga con titolo + anno e mette in lista
  339.     MovieTitle := MovieTitle + ' (' + Line + ')';
  340.     PickTreeAdd(MovieTitle, MovieAddress);
  341.     
  342.     // Prossimo film in lista ...
  343.     LineNr := FindLine('<a href="bancadati_scheda.asp?sch=',Page,LineNr+1);
  344.  
  345.   end;  // while
  346.   
  347.   // Controlla se ci sono altre pagine di risultati
  348.   LineNr := FindLine('Succ.',Page,LineNr);
  349.   if LineNr<>-1 then
  350.     begin
  351.     idx := idx+1;
  352.     // PickTreeAdd('Ci sono altre pagine ...'+IntToStr(idx), '');
  353.     // LineNr := FindLine('Succ.',Page,LineNr);
  354.     
  355.     Line := Page.GetString(LineNr);
  356.     // Estrae l'URL della pagina successiva
  357.     BeginPos := pos('href="', Line)+6;
  358.     EndPos := pos('">', Line);
  359.     Line := SITE + copy(Line, BeginPos, endPos-BeginPos);
  360.     // Richiama la pagina successiva e la analizza
  361.     Pagina := TStringList.Create;
  362.     Pagina.Text := GetPage(Line);
  363.  
  364.     // Debug
  365.     //Page.SaveToFile(PATHLOG+MovieName+'.res'+IntToStr(idx));
  366.     //Page.LoadFromFile(PATHLOG+MOVIE+'.res');
  367.  
  368.     AddMoviesTitles(Pagina);
  369.     Pagina.Free;
  370.     end;
  371. end;
  372.  
  373.  
  374. // ----- main()
  375.  
  376. Var
  377.   TempVar: String;
  378. begin
  379.   if CheckVersion(3,4,1) then
  380.   begin
  381.     MovieName := GetField(fieldOriginalTitle);
  382.     if MovieName = '' then
  383.       MovieName := GetField(fieldTranslatedTitle);
  384.     if Input('Cinematografo.it', 'Inserire il nome del film:', MovieName) then
  385.     begin
  386.       TempVar := 'http://www.cinematografo.it/bdcm/bancadati_query.asp?fi='+UrlEncode(MovieName)+'&R1=TI&image1.x=24&image1.y=24';
  387.       analyzepage(TempVar);
  388.     end;
  389.   end else
  390.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.1)');
  391. end.
  392.